package com.example.demo.entity.base;

import java.util.List;

import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageInfo;

/**
 * 返回给前端的分页对象
 * <br/>
 * 实际是将数据库的结果对象进行转换生成，不直接使用数据库结果对象
 * @author Administrator
 * @param <T> 结果对象
 */
public class PageResponseBean<T> {

	/**
	 * 总记录数
	 */
	private Long total;
	/**
	 * 每页显示记录数
	 */
	private Integer pageSize;
	/**
	 * 当前页码
	 */
	private Integer pageNum;
	/**
	 * 总页数
	 */
	private Integer totalPages;
	/**
	 * 返回的分页列表数据
	 */
	private List<T> pageData;
	/**
	 * 无参构造方法
	 */
	public PageResponseBean(){
		
	}
	/**
	 * 全参构造方法
	 * @param total
	 * @param pageSize
	 * @param pageNum
	 * @param pageData
	 */
	public PageResponseBean(Long total, Integer pageSize, Integer pageNum,Integer totalPages, List<T> pageData) {
		this.total = total;
		this.pageSize = pageSize;
		this.pageNum = pageNum;
		this.totalPages = totalPages;
		this.pageData = pageData;
	}
	
	public PageResponseBean(Page<T> page,List<T> pageData) {
		this.total = page.getTotal();
		this.pageSize = page.getPageSize();
		this.pageNum = page.getPageNum();
		this.totalPages = page.getPages();
		this.pageData = pageData;
	}
	
	public Integer getTotalPages() {
		return totalPages;
	}
	public void setTotalPages(Integer totalPages) {
		this.totalPages = totalPages;
	}
	public Long getTotal() {
		return total;
	}
	public void setTotal(Long total) {
		this.total = total;
	}
	public Integer getPageSize() {
		return pageSize;
	}
	public void setPageSize(Integer pageSize) {
		this.pageSize = pageSize;
	}
	public Integer getPageNum() {
		return pageNum;
	}
	public void setPageNum(Integer pageNum) {
		this.pageNum = pageNum;
	}
	public List<T> getPageData() {
		return pageData;
	}
	public void setPageData(List<T> pageData) {
		this.pageData = pageData;
	}
	
	/**
	 * 对象转换，将数据库的结果对象转换为返回前端的结果对象。<br/>
	 * R 为数据库实体对象，T 为前端响应对象，此处只转换分页信息，列表数据pageData需自己转换进行赋值
	 * @param info 数据库查询结果的封装对象
	 * @return
	 */
	public static <T,R> PageResponseBean<T> transPageInfo(PageInfo<R> infos) {
		//只提取infos的分页信息：total; pageNum; pageSize;
		PageResponseBean<T> pageData = new PageResponseBean<>();
		//总记录数
		pageData.setTotal(infos.getTotal());
		//当前页码
		pageData.setPageNum(infos.getPageNum());
		//每页显示记录数
		pageData.setPageSize(infos.getPageSize());
		//总页数
		pageData.setTotalPages(infos.getPages());
		//结果集得单独处理
		return pageData;
	}
	
	/**
	 * 对象转换，同类型转换，不能直接对PageHelper结果集的pageinfo对象进行转换，可能会清除其分页信息。
	 * @param infos
	 * @return
	 */
	public static <T> PageResponseBean<T> transSamePageInfo(PageInfo<T> infos) {
		return new PageResponseBean<>(infos.getTotal(), infos.getPageSize(), infos.getPageNum(), infos.getPages(), infos.getList());
	}
	
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return JSONObject.toJSONString(this);
	}
}